//
// Created by ASUS on 2024/3/24.
//

#include <bits/stdc++.h>
using namespace std;

class BIT{
private:
	vector<int> tree,arr;
public:
	BIT(int n):tree(n),arr(n){}

	inline int lowbit(int i){
		return i&-i;
	}
	//修改a[i]的值为x
	void add(int i,int x){
		tree[i]=arr[i]=x;   //修改为x
		//tree[i]=arr[i]+=x; //加x
		while(i<tree.size()){
			tree[i]=arr[i];
			for(int j=1;j<lowbit(i);j<<=1){
				tree[i]=max(tree[i],tree[i-j]);
			}
			i+=lowbit(i);
		}
	}
	//区间[l,r]的最大值
	int query(int l,int r){
		int res=INT_MIN;
		while(l<=r){
			if(r-lowbit(r)+1>=l){
				res=max(res,tree[r]);
				r-=lowbit(r);
			}else{
				res=max(res,arr[r]);
				--r;
			}
		}
		return res;
	}
	//区间[1,i]的最大值
	int query(int i){
		int res=0;
		while(i>0){
			res=max(res,tree[i]);
			i-= lowbit(i);
		}
		return res;
	}
};

int main(){
	//freopen(R"(E:\CLionProjects\leetcodecpp\test.in)","r",stdin);
	int n,m;cin>>n>>m;
	vector<int> a(n);
	for(int i=0;i<n;i++) cin>>a[i];
	BIT t(n+1);//下标从1开始
	int pre=0;
	for(int i=0;i<n;i++){
		t.add(i+1,a[i]-pre);
		pre=a[i];
	}
	while(m--){
		int op;cin>>op;
		if(op==1){
			int x,y,k;cin>>x>>y>>k;
			t.add(x,k);
			t.add(y+1,-k);
		}else{
			int x;cin>>x;
			cout<<t.query(x)<<"\n";
		}
	}

	return 0;
}